﻿#include <iostream>
#include <string>
#include <unordered_set>
#include <vector>
using namespace std;
using ll = long long;

int T;
int a, b;
string low, high;
int ans;


// cur 表示当前第几位
// down 表示当前数是否有下限限制
// up 表示当前数是否有上限限制
// st 记录出现过的数字
// n 表示答案应该是几位
void dfs(int cur, bool down, bool up, string s, int n, unordered_set<int>& st) {
    if (cur == b && ans == -1) {
        ans = stoi(s);
        return;
    }

    // 遍历需要的数字，如果这个数字还没有出现
    for (int i = 1; i <= n; ++i) {
        // 如果这个数字已经出现过了，跳过
        if (st.count(i))
            continue;
        // 如果这个位数需要下限，且低于了下限
        if (down && ((low[cur] - '0') > i))
            continue;
        // 如果这个位数需要上限，且高于了上限
        if (up && ((high[cur] - '0') < i))
            continue;
        // 如果在上下限之间就可以通过
        st.insert(i);
        char ch = '0' + i;
        dfs(cur + 1, down && ((low[cur] - '0') == i), up && ((high[cur] - '0') == i), s + ch, n, st);
        if (ans != -1)
            return;
        st.erase(i);
    }
}


int main() {
    cin >> T;
    while (T--) {
        cin >> low >> high;
        a = low.size(), b = high.size();
        if (a < b) {
            low = string(b - a, '0') + low;
        }
        ans = -1;
        for (int i = a; i <= b; ++i) {
            unordered_set<int> st;
            dfs(b - i, i == a, i == b, "", i, st);
            if (ans != -1)
                break;
        }
        cout << ans << endl;
    }
    return 0;
}